<?php
 Session_Start () ;
 If (!$_SESSION ["repertoire_config"]) { Header ("Location: ../../sortie.php?sortie=3") ; }
 Include ("../../include/garennes.cfg") ;
 Include ("../../include/init.php") ;
 Include ("../include/config.inc") ;
 verif_droits ($droit_courant, $_SESSION ["code"]) ;
 
 Include ("../../include/recup_notes_sauvegardes.php") ;
 
 $table = var_courante ("table", 0, null) ;
 $compresse = var_courante ("compresse", 0, 0) ;
 $separateur = var_courante ("separateur", 0, ";") ;
 $transmis = var_courante ("transmis", 0, 0) ;
 
 @Set_Time_Limit (0) ;
 
 Function fabrique_csv ($nom_table)
  {
   Global $id_sql, $separateur ;
   $resultat = SQL_commande ("SELECT * FROM ".$nom_table, $id_sql) ;
   $total_t = SQL_nbr_champs ($resultat) ;
   $chaine = "" ;
   While ($ligne = SQL_ligne_suivante ($resultat))
    {
     $chaine .= "\"".$ligne [0]."\"" ;
     For ($i = 1 ; $i < $total_t ; $i++)
      {
       $chaine .= $separateur."\"".Str_Replace (Chr (13), "\\n", $ligne [$i])."\"" ;
      }
     If (PHP_OS == "Linux") { $chaine .= "\n" ; } Else { $chaine .= "\n" ; }
    }
   $chaine = filtrage_utf8 ($chaine) ;
   Return $chaine ;
  }
 
 Function transmettre ($nom, $ou)
  {
   Header ("Content-disposition: filename=".$nom) ;
   Header ("Content-type: application/compresse") ;
   Header ("Pragma: no-cache") ;
   Header ("Expires: 0") ;
   ReadFile ($ou."/".$nom) ;
  }
 
 Function sauvegarde ($num, $qui, $ou, $nom, $c, $t)
  {
   Global $id_sql, $ext_texte, $sep_rep ;
   $taille = 0 ;
   For ($i = 0 ; $i < SizeOf ($qui) ; $i++)
    {
     $fichier = FOpen ($ou.$sep_rep.$qui [$i].$ext_texte, "w") ;
      FPuts ($fichier, fabrique_csv ($qui [$i])) ;
     FClose ($fichier) ;
     $taille += FileSize ($ou.$sep_rep.$qui [$i].$ext_texte) ;
     SQL_commande ("INSERT INTO sauvegardes_fichiers (numero, nom, extension, taille)
                    VALUES ('".$num."', '".$qui [$i]."', '".$ext_texte."', '".FileSize ($ou.$sep_rep.$qui [$i].$ext_texte)."')", $id_sql) ;
    }
   If ($c)
    {
     Exec ("cd ".$ou."; tar cf ./".$nom.".tar ./*".$ext_texte) ;
     Exec ("cd ".$ou."; gzip ./".$nom.".tar") ;
     @UnLink ($ou."/"."*".$ext_texte) ;
     $nom .= ".tar.gz" ;
     $efface = 0 ;
     $taille = FileSize ($ou.$sep_rep.$nom) ;
     SQL_commande ("UPDATE sauvegardes SET nom_fichier='".$nom."' WHERE id_sauvegarde='".$num."' LIMIT 1", $id_sql) ;
    }
   ElseIf ($t)
    {
     Exec ("cd ".$ou."; tar cf ./".$nom.".tar ./*".$ext_texte) ;
     $nom .= ".tar" ;
     $efface = 1 ;
    }
   SQL_commande ("UPDATE sauvegardes SET taille='".$taille."' WHERE id_sauvegarde='".$num."' LIMIT 1", $id_sql) ;
   If ($t) { transmettre ($nom, $ou) ; }
   If ($efface) { @Unlink ($ou."/".$nom) ; }
  }
 
 Function sauvegarde_sql ($num, $qui, $ou, $nom, $c, $t)
  {
   Global $id_sql, $ext_sql, $sep_rep ;
   $nom_sql = "s".Date ("Y-m-d_H-i-s") ;
   $fichier = FOpen ($ou.$sep_rep.$nom_sql.$ext_sql, "w") ;
   $s = structure_table_SQL ($qui) ;
   $s = filtrage_utf8 ($s) ;
   FPuts ($fichier, $s) ;
   $d = donnees_table_SQL ($qui) ;
   $d = filtrage_utf8 ($d) ;
   FPuts ($fichier, $d) ;
   FClose ($fichier) ;
   $taille = FileSize ($ou.$sep_rep.$nom_sql.$ext_sql) ;
   //$ok = SQL_commande ("INSERT INTO sauvegardes_fichiers (numero, nom, extension, taille)
   //                     VALUES ('".$num."','".$nom_sql."','".$ext_sql."','".FileSize ($ou.$sep_rep.$nom_sql.$ext_sql)."')", $id_sql) ;
   If ($c)
    {
     Exec ("cd ".$ou."; tar cf ./".$nom.".tar ./".$nom_sql.$ext_sql) ;
     Exec ("cd ".$ou."; gzip ./".$nom.".tar") ;
     @UnLink ($ou."/".$nom_sql.$ext_sql) ;
     $nom .= ".tar.gz" ;
     $efface = 0 ;
     $taille = FileSize ($ou.$sep_rep.$nom) ;
     $ok = SQL_commande ("UPDATE sauvegardes SET nom_fichier='".$nom."' WHERE id_sauvegarde='".$num."' LIMIT 1", $id_sql) ;
    }
   Else
    {
     If ($t)
      {
       Exec ("cd ".$ou."; tar cf ./".$nom.".tar ./".$nom_sql.$ext_sql) ;
       $nom .= ".tar" ;
       $efface = 1 ;
      }
     Else { $ok = SQL_commande ("UPDATE sauvegardes SET nom_fichier='".$nom_sql.$ext_sql."' WHERE id_sauvegarde='".$num."' LIMIT 1", $id_sql) ; }
    }
   
   $ok = SQL_commande ("UPDATE sauvegardes SET taille='".$taille."' WHERE id_sauvegarde='".$num."' LIMIT 1", $id_sql) ;
   If ($t) { transmettre ($nom, $ou) ; }
   If ($efface) { @Unlink ($ou."/".$nom) ; }
  }

 If (PHP_OS == "Linux") { $sep_rep = "/" ; } Else { $sep_rep = "\\" ; }
 If (IsSet ($table))
  {
   $d1 = Date ("Y-m-d") ;
   $d2 = Date ("H-i-s") ;
   $nom_rep = "s".$d1."_".$d2 ;
   @MkDir ($repertoire_sauvegarde.$sep_rep.$nom_rep) ;
   If ($compresse) { $c = 1 ; } Else { $c = 0 ; }
   If ($transmis) { $t = 1 ; } Else { $t = 0 ; }
   $resultats = SQL_commande ("INSERT INTO sauvegardes (nom_repertoire, date, type, compresse, transmis, separateur)
                               VALUES ('".$nom_rep."', '".$d1." ".$d2."', '".$table."', '".$c."', '".$t."', '^".$separateur."^')", $id_sql) ;
   $resultats = SQL_commande ("SELECT id_sauvegarde FROM sauvegardes WHERE date='".$d1." ".$d2."' LIMIT 1", $id_sql) ;
   $numero = SQL_ligne_suivante ($resultats) ;
   UnSet ($f) ;
   Switch ($table)
    {
     Case "Toutes"  : $resultats = SQL_commande ("SHOW TABLES", $id_sql) ;
                      For ($i = 0 ; $i < SQL_nbr_lignes ($resultats) ; $i++)
                       {
                        $ligne = SQL_ligne_suivante ($resultats) ;
			$f [$i] = $ligne [0] ;
                       }
		      sauvegarde ($numero [0], $f, $repertoire_sauvegarde.$sep_rep.$nom_rep, $sql_base, $compresse, $transmis) ;
		      Break ;
     Case "Profs"   : $f [0] = "utilisateurs" ; $f [1] = "services_prof" ; $f [2] = "appreciations" ;
                      $f [3] = "controles" ; $f [4] = "notes" ; $f [5] = "cahier_textes" ; $f [6] = "cahier_documents" ;
		      $f [7] = "cahier_type_documents" ; $f [8] = "calcul_moyenne" ; $f [9] = "memo_notes" ;
		      sauvegarde ($numero [0], $f, $repertoire_sauvegarde.$sep_rep.$nom_rep, $sql_base."_profs", $compresse, $transmis) ;
		      Break ;
     Case "Eleves"  : $f [0] = "eleves" ; $f [1] = "services_classe" ; $f [2] = "options_eleve" ;
                      sauvegarde ($numero [0], $f, $repertoire_sauvegarde.$sep_rep.$nom_rep, $sql_base."_eleves", $compresse, $transmis) ;
		      Break ;
     Case "Gestion" : $f [0] = "utilisateurs" ; $f [1] = "classes" ; $f [2] = "disciplines" ;
                      $f [3] = "etablissements" ; $f [4] = "gestion" ; $f [5] = "menus" ;
		      $f [6] = "periodes_classe" ; $f [7] = "sessions" ; $f [8] = "signatures" ; $f [9] = "themes" ;
		      $f [10] = "types_periode" ; $f [11] = "sous_disciplines" ; $f [12] = "vie_scolaire" ;
		      sauvegarde ($numero [0], $f, $repertoire_sauvegarde.$sep_rep.$nom_rep, $sql_base."_gestion", $compresse, $transmis) ;
		      Break ;
     Case "Toutes_SQL"  : $resultats = SQL_commande ("SHOW TABLES", $id_sql) ;
                          $f [0] = SQL_nbr_lignes ($resultats) ;
                          For ($i = 1 ; $i <= $f [0] ; $i++)
                           {
                            $ligne = SQL_ligne_suivante ($resultats) ;
		            $f [$i] = $ligne [0] ;
                           }
		          sauvegarde_sql ($numero [0], $f, $repertoire_sauvegarde.$sep_rep.$nom_rep, $nom_rep, $compresse, $transmis) ;
		          Break ;
     Case "Profs_SQL"   : $f [0] = 10 ;
                          $f [1] = "utilisateurs" ; $f [2] = "services_prof" ; $f [3] = "appreciations" ;
                          $f [4] = "controles" ; $f [5] = "notes" ; $f [6] = "cahier_textes" ; $f [7] = "cahier_documents" ;
		          $f [8] = "cahier_type_documents" ; $f [9] = "calcul_moyenne" ; $f [10] = "memo_notes" ;
		          sauvegarde_sql ($numero [0], $f, $repertoire_sauvegarde.$sep_rep.$nom_rep, $nom_rep, $compresse, $transmis) ;
		          Break ;
     Case "Eleves_SQL"  : $f [0] = 3 ; $f [1] = "eleves" ; $f [2] = "services_classe" ; $f [3] = "options_eleve" ;
                          sauvegarde_sql ($numero [0], $f, $repertoire_sauvegarde.$sep_rep.$nom_rep, $nom_rep, $compresse, $transmis) ;
		          Break ;
     Case "Gestion_SQL" : $f [0] = 13 ;
                          $f [1] = "utilisateurs" ; $f [2] = "classes" ; $f [3] = "disciplines" ;
                          $f [4] = "etablissements" ; $f [5] = "gestion" ; $f [6] = "menus" ;
		          $f [7] = "periodes_classe" ; $f [8] = "sessions" ; $f [9] = "signatures" ; $f [10] = "themes" ;
		          $f [11] = "types_periode" ; $f [12] = "sous_disciplines" ; $f [13] = "vie_scolaire" ;
		          sauvegarde_sql ($numero [0], $f, $repertoire_sauvegarde.$sep_rep.$nom_rep, $nom_rep, $compresse, $transmis) ;
		          Break ;
     Default        : $f [0] = $table ;
                      sauvegarde ($numero [0], $f, $repertoire_sauvegarde.$sep_rep.$nom_rep, $sql_base."_".$table, $compresse, $transmis) ;
		      Break ;
    }
  }

 $resultats = SQL_commande ("SELECT * FROM menus WHERE numero='".$droit_courant."' AND ordre='0'", $id_sql) ;
 $l = SQL_tableau_associatif ($resultats, "") ;  
 Echo "<HTML><HEAD>" ;
 entete_html ("Garennes - Sauvegarde", "travail", 1) ;
 Echo styles ("none", "none", "none", $l ["lien"], "none") ;
 Echo "<SCRIPT>" ;
 Echo " function verif()" ;
 Echo " {" ;
 Echo " if (document.forme.separateur.value==\"\")" ;
 Echo " {" ;
 Echo " alert (\"Il manque le SEPARATEUR\\npour les fichiers CSV !\");" ;
 Echo " document.forme.separateur.focus();" ;
 Echo " document.forme.separateur.select();" ;
 Echo " return false;" ;
 Echo " }" ;
 Echo " else return true;" ;
 Echo " }" ;
 Echo " function envoi(nom)" ;
 Echo " {" ;
 Echo " if (verif())" ;
 Echo " {" ;
 Echo " document.forme.table.value=nom;" ;
 Echo " document.forme.submit();" ;
 Echo " }" ;
 Echo " } " ;
 Echo "</SCRIPT>" ;
 Echo "</HEAD>" ;
 
 Echo "<BODY BACKGROUND=\"../images/fond.png\" TEXT=\"".$l ["couleur_texte"]."\" OnContextMenu=\"return false\">" ;
 Echo "<CENTER><FONT COLOR=\"#0000FF\">Sauvegarde&nbsp;des&nbsp;donn&eacute;es&nbsp;</FONT>" ;
 If (IsSet ($message)) { Echo ":&nbsp;<FONT COLOR=\"#FF0000\"><BLINK>Effectu&eacute;e</BLINK></FONT>" ; }
 Echo "<br>R&eacute;pertoire&nbsp;de&nbsp;sauvegarde&nbsp;:&nbsp;<b>".$repertoire_sauvegarde.$sep_rep."</b><br>" ;
 Echo "</CENTER>" ;
 Echo "<TABLE BORDER=\"0\" ALIGN=\"CENTER\" style=\"border-collapse:collapse\"><TR>" ;
 Echo "<TD vALIGN=\"TOP\">" ;
 Echo "<TABLE BORDER=\"1\" BORDERCOLOR=\"#000000\" ALIGN=\"CENTER\" BGCOLOR=\"".$l ["couleur_fond"]."\"  CELLPADDING=\"0\" CELLSPACING=\"0\" style=\"border-collapse:collapse\">" ;
 Echo "<TR><TD BGCOLOR=\"".$l ["lien"]."\" ALIGN=\"CENTER\">&nbsp;<B>Sauvegarde&nbsp;d'une&nbsp;table</B>&nbsp;:&nbsp;</TD></TR>" ;
 Echo "<TR><TD><OL>" ;
 //Echo "<BR>" ;
 $resultats = SQL_commande ("SHOW TABLES", $id_sql) ;
 For ($i = 0 ; $i < SQL_nbr_lignes ($resultats) ; $i++)
  {
   $ligne = SQL_ligne_suivante ($resultats) ;
   Echo "<LI><A HREF=\"javascript:envoi('".$ligne [0]."')\">&nbsp;".$ligne [0]."&nbsp;</A>&nbsp;</LI>" ;
  } 
 //Echo "<BR>" ;
 Echo "</OL></TD></TR></TABLE></TD>" ;
 Echo "<TD>&nbsp;</TD>" ;
 Echo "<TD vALIGN=\"TOP\">" ;
 Echo "<TABLE BORDER=\"1\" BORDERCOLOR=\"#000000\" ALIGN=\"CENTER\" BGCOLOR=\"".$l ["couleur_fond"]."\" CELLPADDING=\"0\" CELLSPACING=\"0\" style=\"border-collapse:collapse\">" ;
 Echo "<TR><TD BGCOLOR=\"".$l ["lien"]."\" ALIGN=\"CENTER\">&nbsp;<B>Sauvegarde&nbsp;totale&nbsp;CSV</B>&nbsp;:&nbsp;</TD></TR>" ;
 Echo "<TR>" ;
 Echo "<TD ALIGN=\"CENTER\">" ;
 Echo "<A HREF=\"javascript:envoi('Toutes')\">&nbsp;Toutes&nbsp;les&nbsp;tables&nbsp;</A><BR>" ;
 Echo "<A HREF=\"javascript:envoi('Profs')\">&nbsp;Base&nbsp;des&nbsp;professeurs&nbsp;</A><BR>" ;
 Echo "<A HREF=\"javascript:envoi('Eleves')\">&nbsp;Base&nbsp;des&nbsp;&eacute;l&egrave;ves&nbsp;</A><BR>" ;
 Echo "<A HREF=\"javascript:envoi('Gestion')\">&nbsp;Gestion&nbsp;g&eacute;n&eacute;rale&nbsp;</A><BR>" ;
 Echo "</TD>" ;
 Echo "</TR>" ;
 Echo "</TABLE>" ;
 Echo "<BR>" ;
 Echo "<TABLE BORDER=\"1\" BORDERCOLOR=\"#000000\" ALIGN=\"CENTER\" BGCOLOR=\"".$l ["couleur_fond"]."\" CELLPADDING=\"0\" CELLSPACING=\"0\" style=\"border-collapse:collapse\">" ;
 Echo "<TR><TD BGCOLOR=\"".$l ["lien"]."\" ALIGN=\"CENTER\">&nbsp;<B>Sauvegarde&nbsp;totale&nbsp;SQL</B>&nbsp;:&nbsp;</TD></TR>" ;
 Echo "<TR>" ;
 Echo "<TD ALIGN=\"CENTER\">" ;
 Echo "<A HREF=\"javascript:envoi('Toutes_SQL')\">&nbsp;Toutes&nbsp;les&nbsp;tables&nbsp;</A><BR>" ;
 Echo "<A HREF=\"javascript:envoi('Profs_SQL')\">&nbsp;Base&nbsp;des&nbsp;professeurs&nbsp;</A><BR>" ;
 Echo "<A HREF=\"javascript:envoi('Eleves_SQL')\">&nbsp;Base&nbsp;des&nbsp;&eacute;l&egrave;ves&nbsp;</A><BR>" ;
 Echo "<A HREF=\"javascript:envoi('Gestion_SQL')\">&nbsp;Gestion&nbsp;g&eacute;n&eacute;rale&nbsp;</A><BR>" ;
 Echo "</TD>" ;
 Echo "</TR>" ;
 Echo "</TABLE>" ;
 Echo "<BR>" ;
 Echo "<TABLE BORDER=\"1\" BORDERCOLOR=\"#000000\" ALIGN=\"CENTER\" BGCOLOR=\"".$l ["couleur_fond"]."\" CELLPADDING=\"0\" CELLSPACING=\"0\" style=\"border-collapse:collapse\">" ;
 Echo "<TR><TD BGCOLOR=\"".$l ["lien"]."\" ALIGN=\"CENTER\">&nbsp;<B>Param&egrave;tres</B>&nbsp;:&nbsp;</TD></TR>" ;
 Echo "<TR>" ;
 Echo "<FORM ACTION=\"./sauvegarde.php\" METHOD=\"POST\" NAME=\"forme\" onSubmit=\"return verif()\">" ;
 Echo "<TD ALIGN=\"LEFT\">" ;
 Echo "<INPUT TYPE=\"HIDDEN\" NAME=\"table\"><BR>" ;
 // Format bz2
 // If (@Function_Exists ('bzcompress')
 
 // Format gzip
 // If (@Function_Exists ('gzencode')
 If (PHP_OS == "Linux")
  {
   Echo "<INPUT TYPE=\"CHECKBOX\" NAME=\"transmis\">&nbsp;Transmettre&nbsp;les&nbsp;donn&eacute;es&nbsp;<BR><BR>" ;
   Echo "<INPUT TYPE=\"CHECKBOX\" NAME=\"compresse\" CHECKED>&nbsp;Compresser&nbsp;les&nbsp;donn&eacute;es&nbsp;<BR><BR>" ;
  }
 Else
  {
   Echo "<INPUT TYPE=\"HIDDEN\" NAME=\"transmis\" VALUE=\"0\">" ;
   Echo "<INPUT TYPE=\"HIDDEN\" NAME=\"compresse\" VALUE=\"0\">" ;
  }
 Echo "&nbsp;S&eacute;parateur&nbsp;CSV&nbsp;:&nbsp;<INPUT TYPE=\"TEXT\" SIZE=\"2\" MAXLENGTH=\"1\" NAME=\"separateur\" VALUE=\"".$separateur."\">&nbsp;<BR><BR>" ;
 Echo "</TD>" ;
 Echo "</FORM>" ;
 Echo "</TR></TABLE>" ;
 Echo "</TD>" ;
 Echo "<TD>&nbsp;</TD>" ;
 Echo "<TD vALIGN=\"TOP\">" ;
 Echo "<TABLE BORDER=\"1\" BORDERCOLOR=\"#000000\" ALIGN=\"CENTER\" BGCOLOR=\"".$l ["couleur_fond"]."\" CELLPADDING=\"0\" CELLSPACING=\"0\" style=\"border-collapse:collapse\">" ;
 Echo "<TR><TD COLSPAN=\"5\" BGCOLOR=\"".$l ["lien"]."\" ALIGN=\"CENTER\">&nbsp;<B>&Eacute;tat&nbsp;des&nbsp;sauvegardes</B>&nbsp;</TD></TR>" ;
 Echo "<TR BGCOLOR=\"".$l ["lien"]."\">" ;
 Echo "<TD ALIGN=\"CENTER\"><B>n&#186;</B></TD>" ;
 Echo "<TD ALIGN=\"CENTER\">&nbsp;<B>Date</B>&nbsp;</TD>" ;
 Echo "<TD ALIGN=\"CENTER\">&nbsp;<B>Heure</B>&nbsp;</TD>" ;
 Echo "<TD ALIGN=\"CENTER\">&nbsp;<B>Tables</B>&nbsp;</TD>" ;
 Echo "<TD ALIGN=\"CENTER\">&nbsp;<B>Taille</B>&nbsp;</TD>" ;
 Echo "</TR>" ;
 $r = SQL_commande ("SELECT * FROM sauvegardes WHERE type!='Import' ORDER BY date DESC", $id_sql) ;
 If (SQL_nbr_lignes ($r) > 0)
  {
   $total = 0 ;
   For ($i = 0 ; $i < SQL_nbr_lignes ($r) ; $i++)
    {
     $u = SQL_tableau_associatif ($r, "") ;
     Echo "<TR" ;
     If ($i%2) { Echo " BGCOLOR=\"".$l ["nom"]."\"" ; }
     Echo ">" ;
     Echo "<TD ALIGN=\"RIGHT\">&nbsp;".(SQL_nbr_lignes ($r)-$i)."&nbsp;</TD>" ;
     $u1 = Explode (" ", $u ["date"]) ;
     $u2 = Explode ("-", $u1 [0]) ;
     $u3 = Explode (":", $u1 [1]) ;
     Echo "<TD ALIGN=\"CENTER\">&nbsp;".$u2 [2]."/".$u2 [1]."/".$u2 [0]."&nbsp;</TD>" ;
     Echo "<TD ALIGN=\"CENTER\">&nbsp;".$u3 [0].":".$u3 [1].":".$u3 [2]."&nbsp;</TD>" ;
     Echo "<TD ALIGN=\"CENTER\">&nbsp;".$u ["type"]."&nbsp;</TD>" ; ;
     Echo "<TD ALIGN=\"RIGHT\">&nbsp;".$u ["taille"]."&nbsp;</TD>" ;
     Echo "</TR>" ;
     $total += $u ["taille"] ;
    }
   Echo "<TR BGCOLOR=\"".$l ["lien"]."\">" ;
   Echo "<TD ALIGN=\"RIGHT\" COLSPAN=\"5\">&nbsp;Taille&nbsp;totale&nbsp;des&nbsp;sauvegardes&nbsp;:&nbsp;".$total."&nbsp;</TD>" ;
   Echo "</TR>" ;
  }
 Else
  {
   Echo "<TR><TD COLSPAN=\"5\" ALIGN=\"CENTER\">&nbsp;<FONT COLOR=\"#FF0000\"><BLINK>Aucune&nbsp;sauvegarde</BLINK></FONT>&nbsp;&nbsp;</TD></TR>" ;
  }
 Echo "</TABLE>" ;
 Echo "</TR></TABLE>" ;
 Echo "</BODY></HTML>" ;
?>